import Taro from '@tarojs/taro'

// 定义请求配置接口
interface RequestConfig {
  url: string
  method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
  data?: any
  header?: Record<string, string>
}

// 定义响应数据结构
interface ResponseData<T = any> {
  code: number
  message: string
  data: T
}

// 请求封装函数
async function request<T>(config: RequestConfig): Promise<ResponseData<T>> {
  const { url, method = 'GET', data, header = {} } = config

  const baseURL = 'http://10.227.207.64:8083' // 替换为实际的前缀

  try {
    // 显示加载中提示
    Taro.showLoading({
      title: '加载中...',
    })

    // 发起请求
    const response = await Taro.request<ResponseData<T>>({
      url: `${baseURL}${url}`, // 拼接 baseURL 和 url
      method: method,
      data: data,
      header: {
        'Content-Type': 'application/json',
        ...header,
      },
    })

    // 隐藏加载中提示
    Taro.hideLoading()

    // 处理响应数据
    if (response.statusCode === 200) {
      return response.data
    } else {
      throw new Error(`请求失败，状态码：${response.statusCode}`)
    }
  } catch (error) {
    console.log(error,'请求失败，请重试')
    // 隐藏加载中提示
    Taro.hideLoading()

    // 错误处理
    Taro.showToast({
      title: '请求失败，请重试',
      icon: 'none',
    })

    throw error
  }
}

export default request
